package logicredis

import (
	"core/component/logger"
	"core/ini"
	"github.com/go-redis/redis"
)

var (
	cacheRedis *redis.Client
)

// InitRedisInstance 初始化数据库
func InitRedisInstance() error {
	var err error
	cfg := ini.CfgGetMe()
	if cacheRedis, err = newRedisClient(cfg.Redis.RedisUrl, cfg.Redis.RedisPoolSize); err != nil {
		return err
	}
	logger.Infof("[redis] init  cache-redis client success URL:%v poolSize:%v", cfg.Redis.RedisUrl, cfg.Redis.RedisPoolSize)
	return nil
}

// CacheRedis ...
func CacheRedis() *redis.Client {
	return cacheRedis
}

func newRedisClient(url string, poolSize int) (*redis.Client, error) {
	opt, err := redis.ParseURL(url)

	if poolSize > 0 {
		opt.PoolSize = poolSize
	}

	if err != nil {
		logger.Errorf("new redis client url:%v error:%v", url, err)
		return nil, err
	}

	redisClient := redis.NewClient(opt)

	pong, err := redisClient.Ping().Result()

	if err != nil {
		logger.Errorf("redis client pong:%v error:%v", pong, err)
		return nil, err
	}

	logger.Debugf("[redis] new redis url:%v pong:%v", url, pong)

	return redisClient, nil
}
